from fastapi import APIRouter, Query

from app.puzzle.service import (
    find_critical_count,
    find_critical_eggs,
)

eggs_drop_router = APIRouter(
    prefix="/eggs_drop_puzzle",
    tags=["Eggs Drop Puzzle"],
    responses={404: {"description": "Not found"}},
)


@eggs_drop_router.get(
    "/find_critical_eggs",
    summary="计算给定楼层数所需的最少鸡蛋数量",
    description="""
    ## 鸡蛋掉落问题 - 计算最少鸡蛋数量
    给定楼层高度，计算在最坏情况下确定临界楼层所需的最少鸡蛋数量。
    ### 参数
    - `floors`: 楼层总数 (必需)
    - `with_cache`: 是否使用缓存计算结果 (默认: True)
    ### 返回值
    最少需要的鸡蛋数量
    ### 示例
    - 输入: floors=100 → 可能需要返回 5 (示例值)
    """,
)
async def find_critical_eggs_route(floors: int, with_cache: bool = True):
    return find_critical_eggs(floors, with_cache)


@eggs_drop_router.get(
    "/find_critical_count",
    summary="计算确定临界楼层的最少尝试次数",
    description="""
    ## 鸡蛋掉落问题 - 计算最少尝试次数
    给定鸡蛋数量和楼层高度，计算在最坏情况下确定临界楼层所需的最少尝试次数。
    ### 参数
    - `eggs`: 可用鸡蛋数量 (必需)
    - `floors`: 楼层总数 (必需)
    - `with_cache`: 是否使用缓存计算结果 (默认: True)
    ### 返回值
    在最坏情况下确定临界楼层所需的最少尝试次数
    ### 示例
    - 输入: eggs=2, floors=100 → 典型返回 14
    - 输入: eggs=3, floors=14 → 典型返回 4
    """,
)
async def find_critical_count_route(
    eggs: int = Query(..., ge=1),
    floors: int = Query(..., ge=1),
    with_cache: bool = True,
):
    return find_critical_count(eggs, floors, with_cache)
